#include <stdio.h>
#include <unistd.h>

int main()
{
  printf("before fork\n");
  //子进程不会执行该printf因为子进程是在这之后被创建的

  gid_t id = fork();//调用fork之后，子进程被创建,与父进程共用代码块，在需要写入的时候会发生写时拷贝
  //父进程和子进程的执行顺序由调度器决定
  
  if(id == 0)
  {
    printf("子进程\n");
  }
  else if(id > 0)
  {
    printf("父进程\n");
  }
  else{}

  printf("fork end\n");

  



  //gid_t id = fork(); 
  //if(id == 0)
  //{
  //  //child
  //  while(1)
  //  {
  //    printf("子进程pid:%d, ppid:%d\n", getpid(), getppid());
  //    sleep(1);
  //  }
  //  //父进程结束后会被bash回收，因此该子进程就会被1号进程领养(孤儿进程)
  //  //1号进程就是操作系统。
  //}
  //else
  //{
  //  int cnt = 10;
  //  //parent
  //  while(1)
  //  {
  //    printf("父进程pid:%d, ppid:%d\n", getpid(), getppid());
  //    sleep(1);
  //    if(cnt-- <= 0) break;
  //  }
  //}
  return 0;
}

//上次子进程结束而父进程没有结束的时候，子进程会进入Z状态，就是因为没有被回收。
